package com.mswyt.utils.msCrudbean.annotation;

import org.springframework.stereotype.Component;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 加在层Entity类上，表示可对该表进行crud操作。
 * 注意：实体类一定要有对应的mapper层，不然无法实现crud托管，具体原因，详情mybatisplus的@MapperScan直接实现原理即可
 * 可通过配置 @MsScan(backPages = {"扫描的包名"})来对含有@MsCrud的类，在项目启动时候进行校验、一些数据缓存等。
 *
 * @author: mashuai
 * @ClassName: MsAsync
 */
@Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MsCrudBean {
    //目标名称，可以理解成每个实体类对应的唯一标识，随便命名，不可重复，用于前段请求入参的targetParam使用，
    String targetParam();

    //实体类的class，必须有其对应的mapper层
    Class<?> entityClazz();

    //service层，如果使用@MsCrudRewrite注解，必填。表示默认的crud方法，不满足你得需求，需要重写
    Class<?> serviceClazz() default Void.class;

    //需要排除的字段，也就是不需要返回的字段
    Class<?> excludeFieldClass() default Void.class;
}
